package com.bawei.zk_01

import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.runBlocking

class Main {
}

fun main() = runBlocking{

    val list = ArrayList<Emp>()
    //使用apply完成，循环往集合里面添加20条数据，并打印集
    list.apply {
        for (i in 1..10){
            add(Emp("aa",10,"aa"))
        }
    }
    println(list)

    //调用匿名函数
    val test = test {
        it * 10
    }
    println(test)

    ///构建一个整数数组，循环往里面添加10条数据，取出数组中所有的偶数
    val array = arrayOf(1,2,3,4,5,6,7,8)
    val filter = array.filter { it % 2 == 0 }
    println(filter)

    //构建一个字符串，并调用扩展函数，统计字符串中a出现的次数
    val str = "shufdsifdifg"
    val count = str.count('d')
    println(count)

    //调用内联函数
    val a = inlineSum(arrayListOf(1,2,3,4,5,6,7,8),0)
    println(a)

    //一个flow，完成发送数据，接收数据
    val flow = flow<Int> {
        emit(1)
        emit(2)
    }
    flow.collect{
        println(it)
    }

}

//声明一个数据类Emp，给几个属性
data class Emp(val name:String,val age:Int,val sum:String)

//明一个函数，有一个参数为匿名函数，并调用
fun test(back: (Int) -> Int) : Int{
    return back(10)
}

// 一个String的扩展函数并调用，用于统计某个字符出现的次数
fun String.count(c:Char) : Int {
    var count = 0
    for (i in this){
        if (i == c){
            count++
        }
    }
    return count
}

//编写一个内联函数inlineSum，它接受一个整数列表和一个整数累加器作为参数。该函数需要遍历列表，并使用累加器对每个元素进行累加操作。最后返回累加后的结果
inline fun inlineSum(list: List<Int>, initial: Int): Int {
    var sum = initial
    for (i in list) {
        sum += i
    }
    return sum
}